home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir28 / satsat1.zip / SATSAT1.BAS < prev    next >
BASIC Source File  |  1994-10-10  |  31KB  |  608 lines

  1.      REM
  2.      REM                      SATSAT1.BAS
  3.      REM
  4.      REM     This BASIC program computes and displays the locations
  5.      REM  of Saturn's Satellites for a given date and time.  See
  6.      REM  "Practical Astronomy with your Calculator" by Peter
  7.      REM  Duffett-Smith and the Astronomical Almanac for explanations
  8.      REM  of some of the calculations here.  The code is included so
  9.      REM  that users can make changes or convert to another language.
  10.      REM  This code was made for QBASIC (comes with DOS 5.0 or greater).
  11.      REM
  12.      NMF$ = "SATSAT1"
  13.      MODE = 1
  14.      IF MODE = 1 THEN XMAX = 639: YMAX = 479: RATYX = 1: SCREEN 12: WIDTH 80, 30: STRT = 17
  15.      IF MODE = 2 THEN XMAX = 639: YMAX = 349: RATYX = 480 / 350: SCREEN 9: WIDTH 80, 43: STRT = 24
  16.      REM ************************ CONSTANTS *********************************
  17.      REM # means double-precision, $ means string
  18.      DIM SMA(10), E(10), U(10), U0(10), CS(10), N$(10), PD#(10), RSS(10)
  19.      PI = 3.14159265#
  20.      P = PI / 180
  21.      REM Orbital Rate of Saturn in Degrees per Days
  22.      TP = 360 / (29.45771 * 365.2422)
  23.      REM Orbital Rate of Earth in Degrees per Day
  24.      TE = 360 / (1.00004 * 365.2422)
  25.      REM Eccentricity of Saturn's Orbit
  26.      EP = .0556155#
  27.      REM Eccentricity of Earth's Orbit
  28.      EE = .016718#
  29.      REM Semimajor axis of Earth's and Saturn's orbit in Astronomical Units
  30.      RE0 = 1: RP0 = 9.554747
  31.      REM Tilt of Earth's Axis - obliquity of the ecliptic
  32.      OBL = 23.43928
  33.      REM Names of the Satellites
  34.      N$(1) = "Mimas": N$(2) = "Enceladus": N$(3) = "Tethys": N$(4) = "Dione"
  35.      N$(5) = "Rhea": N$(6) = "Titan": N$(7) = "Hyperion": N$(8) = "Iapetus"
  36.      REM Semimajor Axis of the Satellites' Orbit in Kilometers
  37.      SMA(1) = 185600: SMA(2) = 238100: SMA(3) = 294700: SMA(4) = 377500
  38.      SMA(5) = 527200: SMA(6) = 1221600: SMA(7) = 1483000: SMA(8) = 3560100
  39.      REM Visual Magnitude of the Satellites
  40.      MAG(1) = 13: MAG(2) = 11.8: MAG(3) = 10.3: MAG(4) = 10.2
  41.      MAG(5) = 9.8: MAG(6) = 8.4: MAG(7) = 14.3: MAG(8) = 11.2
  42.      REM Pixel Size of Moons
  43.      RSS(1) = 0: RSS(2) = 0: RSS(3) = 0: RSS(4) = 0
  44.      RSS(5) = 1: RSS(6) = 1: RSS(7) = 0: RSS(8) = 0
  45.      REM Semimajor Axis of the Satellites' Orbit in Kilometers
  46.      SMA(1) = 185600: SMA(2) = 238100: SMA(3) = 294700: SMA(4) = 377500
  47.      SMA(5) = 527200: SMA(6) = 1221600: SMA(7) = 1483000: SMA(8) = 3560100
  48.      REM Eccentricity of Satellites' Orbit (Program uses 0)
  49.      REM Satellites' Color
  50.      CS(1) = 15: CS(2) = 15: CS(3) = 15: CS(4) = 15
  51.      CS(5) = 15: CS(6) = 15: CS(7) = 15: CS(8) = 15
  52.      REM Synodic Orbital Period of Moons in Days
  53.      PD#(1) = .9425059#
  54.      PD#(2) = 1.3703741#
  55.      PD#(3) = 1.888095#
  56.      PD#(4) = 2.7375229#
  57.      PD#(5) = 4.5191641#
  58.      PD#(6) = 15.966903#
  59.      PD#(7) = 21.3792654#
  60.      PD#(8) = 79.8768329#
  61.      RS = 60330: REM Radius of planet in kilometers
  62.      RS1 = 92000: REM Inner radius of inner ring in kilometers
  63.      RS2 = 117500: REM Outer radius of inner ring in kilometers
  64.      RS3 = 122500: REM Inner radius of outer ring in kilometers
  65.      RS4 = 136500: REM Outer radius of outer ring in kilometers
  66.      NM = 8: REM Number of moons displayed
  67.      REM ************************ EPOCH INFORMATION *************************
  68.      JDE# = 2444238.5#: REM Epoch Jan 0.0 1980 = December 31,1979 0:0:0 UT
  69.      LPE = 165.322242#: REM Longitude of Saturn at Epoch
  70.      LPP = 92.6653974#: REM Longitude of Saturn's Perihelion
  71.      LEE = 98.83354#: REM Longitude of Earth at Epoch
  72.      LEP = 102.596403#: REM Longitude of Earth's Perihelion
  73.      REM U0(I) = Angle from inferior geocentric conjuction
  74.      REM         measured westward along the orbit at epoch
  75.      U0(1) = 19.094
  76.      U0(2) = 174.5
  77.      U0(3) = 173.313
  78.      U0(4) = 76.5
  79.      U0(5) = 36.969
  80.      U0(6) = 57.414
  81.      U0(7) = 150.781
  82.      U0(8) = 181.058
  83.      REM ********************************************************************
  84.      REM *                                                                  *
  85.      REM *    Program Control                                               *
  86.      REM *                                                                  *
  87.      REM ********************************************************************
  88.      IJK = 5: REM Starting Zoom Size
  89.      O1 = 0: O2 = 1: REM Option to Draw Orbits
  90.      C1 = 15: C2 = 7: REM Color to Blink Moons
  91.      MOON = 5: REM Moon to Blink?
  92.      CHI = 0: REM Change Zoom Factor?
  93.      GOSUB 9700: REM Show Startup Screen
  94. 1    GOSUB 9800: REM Get Local Date and Time
  95.      LASTH = LHOUR: LASTM = NMIN
  96.      GOSUB 1000: REM Calculations
  97.      GOSUB 2000: REM Display
  98. 5    GOSUB 9800: REM Get Local Date and Time
  99.      IF NSEC = LSEC THEN GOTO 100
  100.      LOCATE STRT, 1
  101.      PRINT USING "LT: ##:##:##  ##/##/####"; LHOUR; NMIN; NSEC; LMONTH; LDAY; LYEAR;
  102.      LOCATE STRT + 1, 1
  103.      PRINT USING "UT: ##:##:##  ##/##/####"; NHOUR; NMIN; NSEC; NMONTH; NDAY; NYEAR
  104.      IF INT(NMIN / 10) <> INT(LASTM / 10) THEN GOSUB 1000: GOSUB 2000
  105.      IF NMIN <> LASTM THEN GOSUB 1000: GOSUB 2900
  106.      LASTM = NMIN
  107. 99   T$ = RIGHT$(LEFT$(TIME$, 7), 1): NSC = (ASC(T$) - 48) * 10
  108.      T$ = RIGHT$(LEFT$(TIME$, 8), 1): NSC = NSC + ASC(T$) - 48
  109.      IF NSC = LSC THEN GOTO 100
  110.      SWAP C1, C2
  111.      IF MOON > 0 AND Y(1, MOON) < YMAX / 2 THEN CIRCLE (X(1, MOON), Y(1, MOON)), RSS(MOON), C1
  112.      IF MOON > 0 AND MOON <= IJK THEN CIRCLE (X(2, MOON), Y(2, MOON)), RSS(MOON), C1
  113.      IF MOON > 0 THEN LOCATE STRT + 4 + MOON, 5: COLOR C1: PRINT N$(MOON);
  114.      COLOR 15
  115.      LSC = NSC
  116. 100  Z$ = INKEY$
  117. 101  IF Z$ = "1" THEN MOON = 1: GOSUB 2900
  118.      IF Z$ = "2" THEN MOON = 2: GOSUB 2900
  119.      IF Z$ = "3" THEN MOON = 3: GOSUB 2900
  120.      IF Z$ = "4" THEN MOON = 4: GOSUB 2900
  121.      IF Z$ = "5" THEN MOON = 5: GOSUB 2900
  122.      IF Z$ = "6" THEN MOON = 6: GOSUB 2900
  123.      IF Z$ = "7" THEN MOON = 7: GOSUB 2900
  124.      IF Z$ = "8" THEN MOON = 8: GOSUB 2900
  125.      IF Z$ = "D" OR Z$ = "d" THEN GOSUB 9600: CHG = 1: GOSUB 1000: GOSUB 2000
  126.      IF Z$ = "X" OR Z$ = "x" THEN GOTO 9999
  127.      IF Z$ = "Z" THEN IJK = IJK - 1: CHI = 1
  128.      IF Z$ = "z" THEN IJK = IJK + 1: CHI = 1
  129.      IF IJK < 1 THEN IJK = 1: CHI = 0
  130.      IF IJK > NM THEN IJK = NM: CHI = 0
  131.      IF CHI = 1 THEN CHI = 0: GOSUB 2000
  132.      IF Z$ = "C" OR Z$ = "c" THEN CHG = 0: GOTO 1
  133.      IF Z$ = "O" OR Z$ = "o" THEN SWAP O1, O2: GOSUB 2000
  134.      IF Z$ = "h" OR Z$ = "H" THEN GOSUB 9500: GOSUB 2000
  135.      IF Z$ = "T" OR Z$ = "t" THEN GOSUB 9400: GOSUB 2000
  136.      IF CHG = 0 THEN GOTO 5 ELSE GOTO 99
  137. 1000 REM ********************** JULIAN DATE *******************************
  138.      GGG = 1: IF NYEAR <= 1585 THEN GGG = 0
  139.      JD# = -1 * INT(7 * (INT((NMONTH + 9) / 12) + NYEAR) / 4)
  140.      S = SGN(NMONTH - 9): A = ABS(NMONTH - 9)
  141.      J1 = INT(NYEAR + S * INT(A / 7))
  142.      J1 = -1 * INT((INT(J1 / 100) + 1) * 3 / 4)
  143.      JD# = JD# + INT(275 * NMONTH / 9) + NDAY + (GGG * J1)
  144.      JD# = JD# + 1721027 + 2 * GGG + 367 * NYEAR - .5
  145.      JD# = JD# + (NHOUR / 24) + (NMIN / (24 * 60))
  146.      REM ****************** FIND MOON ORBITAL ANGLES ************************
  147.      NN = JD# - JDE#: REM NN = Number of days since epoch
  148.      ME = ((TE * NN) + LEE - LEP) * P: REM Mean Anomoly of Earth
  149.      MP = ((TP * NN) + LPE - LPP) * P: REM Mean Anomoly of Saturn
  150.      VE = ME: VP = MP: REM True Anomolies - Solve Kepler's Equation
  151.      FOR I = 1 TO 3
  152.      VE = VE - (VE - (EE * SIN(VE)) - ME) / (1 - (EE * COS(VE)))
  153.      VP = VP - (VP - (EP * SIN(VP)) - MP) / (1 - (EP * COS(VP)))
  154.      NEXT I
  155.      VE = 2 * ATN(SQR((1 + EE) / (1 - EE)) * TAN(VE / 2)) / P
  156.      IF VE < 0 THEN VE = 360 + VE
  157.      VP = 2 * ATN(SQR((1 + EP) / (1 - EP)) * TAN(VP / 2)) / P
  158.      IF VP < 0 THEN VP = 360 + VP
  159.      REM  Heliocentric Longitudes of Earth and Saturn
  160.      LE = VE + LEP: IF LE > 360 THEN LE = LE - 360
  161.      LP = VP + LPP: IF LP > 360 THEN LP = LP - 360
  162.      REM  Distances of Earth and Saturn from the Sun in AU's
  163.      RE = RE0 * (1 - EE * EE) / (1 + EE * COS(VE * P))
  164.      RP = RP0 * (1 - EP * EP) / (1 + EP * COS(VP * P))
  165.      REM  DT = Distance from Saturn to Earth in AU's - Law of Cosines
  166.      DT = SQR((RE ^ 2) + (RP ^ 2) - (2 * RE * RP * COS((LE - LP) * P)))
  167.      REM  II = Angle between Earth and Sun as seen from Saturn
  168.      II = RE * SIN((LE - LP) * P) / DT
  169.      II = ATN(II / SQR(1 - II * II)) / P: REM  ArcSIN and Law of Sines
  170.      REM   F = NN - (Light Time to Earth in days)
  171.      F = NN - (DT / 173.83)
  172.      F1 = II + (MP / P) - VP
  173.      REM U(I) = Angle from inferior geocentric conjuction measured westward
  174.      FOR I = 1 TO NM
  175.      U(I) = U0(I) + (F * 360 / PD#(I)) + F1
  176.      U(I) = ((U(I) / 360) - INT(U(I) / 360)) * 360
  177.      NEXT I
  178.      REM ****** FIND SYSTEM I LONGITUDE OF SATURN'S CENTRAL MERIDAIN ********
  179.      REM SYSI = EpochSYSI + (F * (Rotational Rate in Degrees per Day)) + Perspective Angle
  180.      SYSI# = 313.95999# + ((JD# - 2449353.5# - (DT / 173.83)) * 844.2682661#) + F1
  181.      SYSI# = ((SYSI# / 360) - INT(SYSI# / 360)) * 360
  182.      REM ******************** FIND SATURN'S COORDINATES *********************
  183.      LAMB = RE * SIN((LP - LE) * P)
  184.      LAMB = ATN(LAMB / (RP - RE * COS((LP - LE) * P))) / P + LP
  185.      NUM = SIN(LAMB * P) * COS(OBL * P)
  186.      DEN = COS(LAMB * P)
  187.      RA = ATN(NUM / DEN) / P
  188.      IF NUM * DEN < 0 THEN RA = RA + 180
  189.      IF NUM < 0 THEN RA = RA + 180
  190.      SINDEC = SIN(OBL * P) * SIN(LAMB * P)
  191.      DEC = ATN(SINDEC / SQR(1 - SINDEC * SINDEC)) / P: REM ArcSIN
  192.      REM **************** FIND INCLINATION OF RINGS *************************
  193.      REM Use dot product of Earth-Saturn vector and Saturn's rotation axis
  194.      TAX = (90 - 83.51) * P: REM Theta coordinate of Saturn's axis
  195.      PAX = 40.27 * P: REM Phi coordinate of Saturn's axis
  196.      TSAT = (90 - DEC) * P
  197.      PSAT = RA * P
  198.      DOT1 = SIN(TAX) * COS(PAX) * SIN(TSAT) * COS(PSAT)
  199.      DOT1 = DOT1 + SIN(TAX) * SIN(PAX) * SIN(TSAT) * SIN(PSAT)
  200.      DOT1 = DOT1 + COS(TAX) * COS(TSAT)
  201.      INC = ATN(SQR(1 - DOT1 ^ 2) / DOT1) / P: REM   ArcCOS
  202.      IF INC > 0 THEN INC = 90! - INC ELSE INC = -90! - INC
  203.      REM ************* FIND INCLINATION OF IAPETUS' ORBIT *******************
  204.      REM Use dot product of Earth-Saturn vector and Iapetus' orbit axis
  205.      TAX = (90 - 76) * P: REM Theta coordinate of Iapetus' orbit axis (estimate)
  206.      PAX = 20.6 * P * 360 / 24: REM Phi coordinate of Iapetus' orbit axis (estimate)
  207.      DOT2 = SIN(TAX) * COS(PAX) * SIN(TSAT) * COS(PSAT)
  208.      DOT2 = DOT2 + SIN(TAX) * SIN(PAX) * SIN(TSAT) * SIN(PSAT)
  209.      DOT2 = DOT2 + COS(TAX) * COS(TSAT)
  210.      INCI = ATN(SQR(1 - DOT2 ^ 2) / DOT2) / P: REM   ArcCOS
  211.      IF INCI > 0 THEN INCI = 90! - INCI ELSE INCI = -90! - INCI
  212.      REM ************* FIND ROTATION ANGLE OF IAPETUS' ORBIT ****************
  213.      REM Use inclination of Iapetus' orbit with respect to ring plane
  214.      GAM = COS(14.47 * P) - DOT1 * DOT2
  215.      GAM = ATN(SQR(1 - GAM ^ 2) / GAM) / P: REM   ArcCOS
  216.      GAM = -1 * GAM
  217.      REM ********************************************************************
  218.      RETURN
  219. 2000 REM ******************** DRAW SATURN (Earth View) **********************
  220.      CLS
  221. 2900 SCALE = (3 * XMAX) / (17 * SMA(IJK))
  222.      XC = XMAX / 2: YC = YMAX / 4
  223.      ASP = SIN(INC * P) / RATYX: REM Aspect Ratio
  224.      A1 = PI: A2 = 0: REM Start and End of Arcs
  225.      IF ASP < 0 THEN SWAP A1, A2: ASP = -ASP
  226.      REM Draw planet
  227.      CIRCLE (XC, YC), RS * SCALE, 7, , , .9 / RATYX
  228.      PAINT (XC, YC), 7, 7
  229.      REM Draw rings
  230.      CIRCLE (XC, YC), RS1 * SCALE - 1, 8, , , ASP
  231.      CIRCLE (XC, YC), RS2 * SCALE + 1, 8, , , ASP
  232.      CIRCLE (XC, YC), RS3 * SCALE - 1, 8, , , ASP
  233.      CIRCLE (XC, YC), RS4 * SCALE + 1, 8, , , ASP
  234.      PAINT (XC - (SCALE * (RS1 + RS2) / 2), YC), 7, 8
  235.      PAINT (XC + (SCALE * (RS1 + RS2) / 2), YC), 7, 8
  236.      PAINT (XC - (SCALE * (RS3 + RS4) / 2), YC), 7, 8
  237.      PAINT (XC + (SCALE * (RS3 + RS4) / 2), YC), 7, 8
  238.      REM ****************** DRAW MOONS (Earth View) *************************
  239.      FOR I = 1 TO NM - 1
  240.      REM   Orbital Paths
  241.      IF SMA(I) * SCALE * ASP < YMAX / 4 AND O1 = 1 THEN CIRCLE (XC, YC), SMA(I) * SCALE, 8, , , ASP
  242.      X(1, I) = XC - (SMA(I) * SIN(U(I) * P) * SCALE)
  243.      Y(1, I) = YC + INT((SMA(I) * COS(U(I) * P) * SIN(INC * P) * SCALE / RATYX))
  244.      IF Y(1, I) < YMAX / 2 THEN CIRCLE (X(1, I), Y(1, I)), RSS(I), CS(I)
  245.      NEXT I
  246.      REM ********************** Iapetus' Orbit *****************************
  247.      TEMPX = -1 * (SMA(8) * SIN(U(8) * P) * SCALE)
  248.      TEMPY = INT((SMA(8) * COS(U(8) * P) * SIN(INCI * P) * SCALE / RATYX))
  249.      X(1, 8) = XC + TEMPX * COS(GAM * P) + TEMPY * SIN(GAM * P): REM Rotation
  250.      Y(1, 8) = YC - TEMPX * SIN(GAM * P) + TEMPY * COS(GAM * P)
  251.      IF X(1, 8) > XMAX OR X(1, 8) < 0 THEN GOTO 2910
  252.      IF Y(1, 8) > YMAX / 2 OR Y(1, 8) < 0 THEN GOTO 2910
  253.      IF O1 = 0 THEN GOTO 2909
  254.      REM   Orbital Path
  255.      TEMPY = INT((SMA(8) * SIN(INCI * P) * SCALE / RATYX))
  256.      XLAST = XC + TEMPY * SIN(GAM * P): REM Rotation
  257.      YLAST = YC + TEMPY * COS(GAM * P)
  258.      FOR I = 0 TO 360 STEP 2
  259.      TEMPX = -1 * (SMA(8) * SIN(I * P) * SCALE)
  260.      TEMPY = INT((SMA(8) * COS(I * P) * SIN(INCI * P) * SCALE / RATYX))
  261.      XDRAW = XC + TEMPX * COS(GAM * P) + TEMPY * SIN(GAM * P): REM Rotation
  262.      YDRAW = YC - TEMPX * SIN(GAM * P) + TEMPY * COS(GAM * P)
  263.      IF YDRAW < YMAX / 2 AND YLAST < YMAX / 2 THEN LINE (XLAST, YLAST)-(XDRAW, YDRAW), 8
  264.      XLAST = XDRAW: YLAST = YDRAW
  265.      NEXT I
  266.      REM Draw Iapetus
  267. 2909 CIRCLE (X(1, 8), Y(1, 8)), RSS(8), CS(8)
  268. 2910 REM ************** Redraw Saturn's exposed hemisphere ****************
  269.      CIRCLE (XC, YC), RS * SCALE + 1, 0, A2, A1, .9 / RATYX
  270.      LINE (XC - RS * SCALE - 1, YC)-(XC + RS * SCALE + 1, YC), 0
  271.      PAINT (XC, YC - RS * SCALE * SGN(INC) / 2), 1, 0
  272.      PAINT (XC, YC - RS * SCALE * SGN(INC) / 2), 7, 0
  273.      CIRCLE (XC, YC), RS * SCALE + 1, 8, A2, A1, .9 / RATYX
  274.      LINE (XC - RS * SCALE - 1, YC)-(XC + RS * SCALE + 1, YC), 7
  275.      REM ***************** DRAW SATURN (Polar View) **********************
  276.      XC = INT(XMAX / 2): YC = 3 * YMAX / 4
  277.      XS1 = XC + (RS * SCALE * COS(II * P)) + 1
  278.      XS2 = XC - (RS * SCALE * COS(II * P)) - 1
  279.      YS1 = YC + (RS * SCALE * SIN(II * P))
  280.      YS2 = YC - (RS * SCALE * SIN(II * P))
  281.      XS3 = YMAX * TAN(II * P) / 4
  282.      REM Draw rings
  283.      CIRCLE (XC, YC), RS1 * SCALE, 8
  284.      CIRCLE (XC, YC), RS2 * SCALE, 8
  285.      CIRCLE (XC, YC), RS3 * SCALE, 8
  286.      CIRCLE (XC, YC), RS4 * SCALE, 8
  287.      PAINT (XC - (SCALE * (RS1 + RS2) / 2), YC), 7, 8
  288.      PAINT (XC + (SCALE * (RS1 + RS2) / 2), YC), 7, 8
  289.      PAINT (XC - (SCALE * (RS3 + RS4) / 2), YC), 7, 8
  290.      PAINT (XC + (SCALE * (RS3 + RS4) / 2), YC), 7, 8
  291.      CIRCLE (XC, YC), RS1 * SCALE + 1, 7
  292.      CIRCLE (XC, YC), RS2 * SCALE - 1, 7
  293.      CIRCLE (XC, YC), RS3 * SCALE + 1, 7
  294.      CIRCLE (XC, YC), RS4 * SCALE - 1, 7
  295.      REM **********************  Draw Shadows *************************
  296.      CIRCLE (XC, YC), RS * SCALE, 7
  297.      PAINT (XC, YC), 7, 7
  298.      LINE (5 * XMAX / 16, YMAX / 2)-(11 * XMAX / 16, YMAX - 1), 15, B: REM   Bottom White Box
  299.      LINE (XS1, YS1)-(XS2, YS2), 15
  300.      LINE (XS1 + XS3, YMAX / 2)-(XS1, YS1), 15
  301.      LINE (XS2 + XS3, YMAX / 2)-(XS2, YS2), 15
  302.      PAINT (XC, YC - 2), 8, 15
  303.      PAINT (XC, YC - 2), 0, 15
  304.      LINE (XS1, YS1)-(XS2, YS2), 0
  305.      LINE (XS1 + XS3, YMAX / 2)-(XS1, YS1), 0
  306.      LINE (XS2 + XS3, YMAX / 2)-(XS2, YS2), 0
  307.      REM ****************** DRAW MOONS (Polar View) *************************
  308.      FOR I = 1 TO IJK
  309.      REM   Orbital Paths
  310.      CIRCLE (XC, YC), SMA(I) * SCALE, 8
  311.      X(2, I) = XC - (SMA(I) * SIN(U(I) * P) * SCALE)
  312.      Y(2, I) = YC + INT((SMA(I) * COS(U(I) * P) * SCALE / RATYX))
  313.      CIRCLE (X(2, I), Y(2, I)), RSS(I), CS(I)
  314.      NEXT I
  315.      REM ********************* DRAW BACKGROUND *****************************
  316.      LINE (3, 6)-(XMAX - 4, YMAX / 2 - 8), 15, B: REM          Top White Box
  317.      LINE (5 * XMAX / 16, YMAX / 2)-(11 * XMAX / 16, YMAX - 1), 15, B: REM   Bottom White Box
  318.      LOCATE STRT, 1
  319.      PRINT USING "LT: ##:##:##  ##/##/####"; LHOUR; NMIN; NSEC; LMONTH; LDAY; LYEAR;
  320.      LOCATE STRT + 1, 1
  321.      PRINT USING "UT: ##:##:##  ##/##/####"; NHOUR; NMIN; NSEC; NMONTH; NDAY; NYEAR
  322.      LOCATE STRT + 4, 1: PRINT "No. SATELLITE  MAGNITUDE"
  323.      FOR I = 1 TO NM
  324.      LOCATE STRT + 4 + I, 1
  325.      PRINT USING " #  \         \   ##.#"; I; N$(I); MAG(I);
  326.      NEXT I
  327.      LOCATE STRT + 0, 58: PRINT "System I Longitude of"
  328.      LOCATE STRT + 1, 57: PRINT USING "Central Meridian = ###!"; SYSI#; CHR$(248)
  329.      LOCATE STRT + 4, 59: PRINT "C O M M A N D S"
  330.      LOCATE STRT + 5, 61: PRINT "h - help";
  331.      LOCATE STRT + 6, 61: PRINT "x - exit";
  332.      LOCATE STRT + 7, 61: PRINT "o - draw orbits";
  333.      LOCATE STRT + 8, 61: PRINT "d - set date";
  334.      LOCATE STRT + 9, 61: PRINT "c - current view";
  335.      LOCATE STRT + 10, 61: PRINT "t - show table";
  336.      LOCATE STRT + 11, 59: PRINT "Z/z - zoom in/out";
  337.      LOCATE STRT + 12, 59: PRINT "1-8 - identify";
  338.      LOCATE 1, 38: PRINT "SOUTH"
  339.      LOCATE 6, 1: PRINT "W"
  340.      LOCATE 7, 1: PRINT "E"
  341.      LOCATE 8, 1: PRINT "S"
  342.      LOCATE 9, 1: PRINT "T"
  343.      LOCATE 6, 80: PRINT "E";
  344.      LOCATE 7, 80: PRINT "A";
  345.      LOCATE 8, 80: PRINT "S";
  346.      LOCATE 9, 80: PRINT "T";
  347.      LOCATE 15, 38: PRINT "NORTH"
  348. 2999 RETURN
  349.     
  350. 9400 REM ********************************************************************
  351.      REM *                                                                  *
  352.      REM *   Show Table                                                     *
  353.      REM *                                                                  *
  354.      REM ********************************************************************
  355.      CLS
  356.      PRINT
  357.      PRINT USING "          Local Date: ##/##/####    Univ. Date: ##/##/####"; LMONTH; LDAY; LYEAR; NMONTH; NDAY; NYEAR
  358.      PRINT USING "          Local Time:  ##:##:##     Univ. Time:  ##:##:##"; LHOUR; NMIN; NSEC; NHOUR; NMIN; NSEC
  359.      PRINT
  360.      PRINT USING "                           Julian Date : ########.###"; JD#
  361.      PRINT USING "             Right Ascension of Saturn : ###.## Hours"; RA * 24 / 360
  362.      PRINT USING "                 Declination of Saturn : ###.##!"; DEC; CHR$(248)
  363.      PRINT USING "   Ring Inclination as seen from Earth : ###.##!"; INC; CHR$(248)
  364.      PRINT USING "      Heliocentric Longitude of Saturn : ###.##!"; LP; CHR$(248)
  365.      PRINT USING "       Heliocentric Longitude of Earth : ###.##!"; LE; CHR$(248)
  366.      PRINT USING "                Sun-Saturn-Earth Angle : ###.##!"; II; CHR$(248)
  367.      PRINT USING "     Distance between Saturn and Earth : ###.## AU = #### million miles"; DT; (DT * 93)
  368.      PRINT USING "       Light time from Saturn to Earth : ###.## minutes"; DT * 8.28
  369.      TEMP = 2 * ATN(TAN(165.6 * P / (2 * 3600)) / DT) * 3600 / P
  370.      PRINT USING "                Angular Size of Saturn : ###.## arcsec"; TEMP
  371.      PRINT USING "  Major Angular Size of Saturn's Rings : ###.## arcsec"; RS4 * TEMP / RS
  372.      PRINT USING "  Minor Angular Size of Saturn's Rings : ###.## arcsec"; ABS(RS4 * TEMP * SIN(INC * P) / RS)
  373.      PRINT
  374.      PRINT "     SATELLITE    MAGNITUDE    ORBITAL RADIUS    ORBITAL PERIOD "
  375.      FOR I = 1 TO NM
  376.      PRINT USING "    \          \     ##.#        ####### km       ###.## days"; N$(I); MAG(I); SMA(I); PD#(I)
  377.      NEXT I
  378.      PRINT : PRINT "                              Press Enter."
  379.      WHILE INKEY$ = "": WEND
  380.      RETURN
  381.  
  382. 9500 REM ********************************************************************
  383.      REM *                                                                  *
  384.      REM *   Help Screen                                                    *
  385.      REM *                                                                  *
  386.      REM ********************************************************************
  387.      CLS : SCREEN 12: WIDTH 80, 30
  388.      LOCATE 1, 1
  389.      PRINT : PRINT : PRINT
  390.      PRINT "                             E A R T H   V I E W"
  391.      PRINT
  392.      PRINT "        Saturn and its moons are shown here as they appear though Earth"
  393.      PRINT "   based telescopes.  The orientation of the display is the same as the"
  394.      PRINT "   view seen in astronomical (inverting) telescopes.  Titan is the easiest"
  395.      PRINT "   moon to see, followed by wide-ranging Iapetus.  A 4-inch telescope"
  396.      PRINT "   often shows Rhea and Dione and sometimes Tethys, but Enceladus usually"
  397.      PRINT "   requires at least a 10-inch.  Hyperion requires an even larger telescope."
  398.      PRINT : PRINT : PRINT : PRINT : PRINT : PRINT
  399.      PRINT "                              P O L A R   V I E W       "
  400.      PRINT
  401.      PRINT "                           A view from above Saturn's  "
  402.      PRINT "                          South pole is shown here     "
  403.      PRINT "                          with the Sun-Saturn-Earth    "
  404.      PRINT "                          angle used to mark the       "
  405.      PRINT "                          shadows on the planet and    "
  406.      PRINT "                          rings.  Earth is straight    "
  407.      PRINT "                          down in this view."
  408.      LINE (3, 6)-(XMAX - 4, YMAX / 2 - 8), 15, B: REM          Top White Box
  409.      LINE (5 * XMAX / 16, YMAX / 2)-(11 * XMAX / 16, YMAX - 1), 15, B: REM   Bottom White Box
  410.      LOCATE STRT, 1
  411.      PRINT "  Local time (LT) and"
  412.      PRINT "  Universal time (UT) "
  413.      PRINT "    are given here."
  414.      PRINT : PRINT : PRINT
  415.      PRINT " Satellites are listed"
  416.      PRINT "   here in order of"
  417.      PRINT "  increasing orbital"
  418.      PRINT "        radii."
  419.      LOCATE STRT + 1, 58: PRINT " The System I Longitude";
  420.      LOCATE STRT + 2, 58: PRINT "of the Central Meridian";
  421.      LOCATE STRT + 3, 58: PRINT "and a list of commands";
  422.      LOCATE STRT + 4, 58: PRINT "    are given here.";
  423.      LOCATE STRT + 9, 58: PRINT "      Press Enter.   ";
  424.      WHILE INKEY$ = "": WEND
  425.      CLS
  426.      PRINT
  427.      PRINT "             C O M M A N D S"
  428.      PRINT
  429.      PRINT "     h - shows the help screens"
  430.      PRINT
  431.      PRINT "     x - exits the program  "
  432.      PRINT
  433.      PRINT "     o - draws the orbits for the moons"
  434.      PRINT "         for the Earth view (toggles on/off)"
  435.      PRINT
  436.      PRINT "     d - changes the date and time of observation"
  437.      PRINT "         (does not change the computer clock date and time)"
  438.      PRINT
  439.      PRINT "     c - displays current view of the Saturn and its moons"
  440.      PRINT "         (use this after changing the date and time)"
  441.      PRINT
  442.      PRINT "     t - displays data table with Saturn's coordinates, ring"
  443.      PRINT "         inclination and other information"
  444.      PRINT
  445.      PRINT "   Z/z - changes the zoom setting; includes 8 settings which allow"
  446.      PRINT "         the orbits of each moon to fit in the polar view box"
  447.      PRINT
  448.      PRINT "   1-8 - press any number between 1 and 8 and the corresponding satellite"
  449.      PRINT "         will blink if it is visible; use the zoom command if the moon is"
  450.      PRINT "         not in the field of view"
  451.      PRINT
  452.      PRINT "                           Press Enter."
  453.      WHILE INKEY$ = "": WEND
  454.      IF MODE = 1 THEN SCREEN 12
  455.      IF MODE = 2 THEN SCREEN 9: WIDTH 80, 43
  456.      RETURN
  457.     
  458. 9600 REM ********************************************************************
  459.      REM *                                                                  *
  460.      REM *   Change Date and Time Manually                                  *
  461.      REM *                                                                  *
  462.      REM ********************************************************************
  463.      LINE (11 * XMAX / 16, YMAX / 2)-(XMAX - 1, YMAX - 1), 8, B
  464.      PAINT (11 * XMAX / 16 + 3, YMAX / 2 + 3), 8, 8
  465.      LINE (11 * XMAX / 16, YMAX / 2)-(XMAX - 1, YMAX - 1), 15, B
  466.      PAINT (11 * XMAX / 16 + 3, YMAX / 2 + 3), 0, 15
  467.      LOCATE STRT, 58
  468.      PRINT "Enter Universal Date"
  469.      LOCATE STRT + 2, 60
  470.      INPUT "Month (MM) : ", NMONTH
  471.      LOCATE STRT + 3, 60
  472.      INPUT "Day (DD) : ", NDAY
  473.      LOCATE STRT + 4, 60
  474.      INPUT "Year (YYYY) : ", NYEAR
  475.      LOCATE STRT + 6, 58
  476.      PRINT "Enter Universal Time"
  477.      LOCATE STRT + 8, 60
  478.      INPUT "Hour : ", NHOUR
  479.      LOCATE STRT + 9, 60
  480.      INPUT "Minute : ", NMIN
  481.      LHOUR = NHOUR - DHOUR
  482.      LDAY = NDAY
  483.      LYEAR = NYEAR
  484.      LMONTH = NMONTH
  485.      NSEC = 0
  486.      GOSUB 9900
  487.      RETURN
  488.     
  489. 9700 REM ********************************************************************
  490.      REM *                                                                  *
  491.      REM *    Startup Screen                                                *
  492.      REM *                                                                  *
  493.      REM ********************************************************************
  494.      TEMP$ = NMF$ + ".CFG"
  495.      OPEN TEMP$ FOR INPUT AS #1
  496.      INPUT #1, Z$, DHOUR
  497.      CLOSE
  498.      LOCATE 10, 23
  499.      PRINT "             SATSAT "
  500.      LOCATE 11, 23
  501.      PRINT "      Satellites of Saturn "
  502.      LOCATE 12, 23
  503.      PRINT "           Version 1.0"
  504.      PRINT : PRINT
  505.      PRINT
  506.      PRINT TAB(17); " Enter the number of hours to add to your local"
  507.      PRINT TAB(17); " time to get Universal Time (Default -> "; DHOUR; ") : ";
  508.      INPUT "", DHOUR$
  509.      IF DHOUR$ = "" THEN GOTO 9702
  510.      LN = LEN(DHOUR$): DHOUR = 0
  511.      FOR I = 1 TO LN
  512.      DHOR$ = LEFT$(RIGHT$(DHOUR$, I), 1)
  513.      DHOR = ASC(DHOR$) - 48
  514.      IF DHOR = -3 THEN DHOUR = -1 * DHOUR: GOTO 9701
  515.      DHOUR = DHOUR + (DHOR * (10 ^ (I - 1)))
  516. 9701 NEXT I
  517.      OPEN TEMP$ FOR OUTPUT AS #1
  518.      PRINT #1, Z$
  519.      PRINT #1, DHOUR
  520.      CLOSE
  521. 9702 RETURN
  522.  
  523. 9800 REM ********************************************************************
  524.      REM *                                                                  *
  525.      REM *    Determine Time                                                *
  526.      REM *                                                                  *
  527.      REM ********************************************************************
  528.      T$ = LEFT$(DATE$, 1): LMONTH = (ASC(T$) - 48) * 10
  529.      T$ = RIGHT$(LEFT$(DATE$, 2), 1): LMONTH = LMONTH + ASC(T$) - 48
  530.      T$ = RIGHT$(LEFT$(DATE$, 4), 1): LDAY = (ASC(T$) - 48) * 10
  531.      T$ = RIGHT$(LEFT$(DATE$, 5), 1): LDAY = LDAY + ASC(T$) - 48
  532.      T$ = RIGHT$(LEFT$(DATE$, 7), 1): LYEAR = (ASC(T$) - 48) * 1000
  533.      T$ = RIGHT$(LEFT$(DATE$, 8), 1): LYEAR = LYEAR + (ASC(T$) - 48) * 100
  534.      T$ = RIGHT$(LEFT$(DATE$, 9), 1): LYEAR = LYEAR + (ASC(T$) - 48) * 10
  535.      T$ = RIGHT$(LEFT$(DATE$, 10), 1): LYEAR = LYEAR + ASC(T$) - 48
  536.      T$ = (LEFT$(TIME$, 1)): LHOUR = (ASC(T$) - 48) * 10
  537.      T$ = RIGHT$(LEFT$(TIME$, 2), 1): LHOUR = LHOUR + ASC(T$) - 48
  538.      T$ = RIGHT$(LEFT$(TIME$, 4), 1): NMIN = (ASC(T$) - 48) * 10
  539.      T$ = RIGHT$(LEFT$(TIME$, 5), 1): NMIN = NMIN + ASC(T$) - 48
  540.      T$ = RIGHT$(LEFT$(TIME$, 7), 1): NSEC = (ASC(T$) - 48) * 10
  541.      T$ = RIGHT$(LEFT$(TIME$, 8), 1): NSEC = NSEC + ASC(T$) - 48
  542.      GOSUB 9900
  543.      RETURN
  544.  
  545. 9900 REM ********************************************************************
  546.      REM *                                                                  *
  547.      REM *  Correct Time after Time Increment                               *
  548.      REM *                                                                  *
  549.      REM ********************************************************************
  550.      IF NSEC >= 60 THEN NSEC = NSEC - 60: NMIN = NMIN + 1
  551.      IF NSEC < 0 THEN NSEC = NSEC + 60: NMIN = NMIN - 1
  552.      IF NMIN >= 60 THEN NMIN = NMIN - 60: LHOUR = LHOUR + 1
  553.      IF NMIN < 0 THEN NMIN = NMIN + 60: LHOUR = LHOUR - 1
  554.      LastDAY = 31
  555.      IF (LMONTH = 4) OR (LMONTH = 6) THEN LastDAY = 30
  556.      IF (LMONTH = 9) OR (LMONTH = 11) THEN LastDAY = 30
  557.      IF LMONTH = 2 THEN LastDAY = 28
  558.      IF (INT(LYEAR / 4) = (LYEAR / 4)) AND (LMONTH = 2) THEN LastDAY = 29
  559.      IF LHOUR >= 24 THEN LHOUR = LHOUR - 24: LDAY = LDAY + 1
  560.      IF LHOUR < 0 THEN LHOUR = LHOUR + 24: LDAY = LDAY - 1
  561.      IF LDAY > LastDAY THEN LDAY = LDAY - LastDAY: LMONTH = LMONTH + 1
  562.      LastDAY = 31
  563.      IF ((LMONTH - 1) = 4) OR ((LMONTH - 1) = 6) THEN LastDAY = 30
  564.      IF ((LMONTH - 1) = 9) OR ((LMONTH - 1) = 11) THEN LastDAY = 30
  565.      IF (LMONTH - 1) = 2 THEN LastDAY = 28
  566.      IF (INT(LYEAR / 4) = (LYEAR / 4)) AND ((LMONTH - 1) = 2) THEN LastDAY = 29
  567.      IF LDAY < 1 THEN LDAY = LDAY + LastDAY: LMONTH = LMONTH - 1
  568.      IF LMONTH > 12 THEN LMONTH = LMONTH - 12: LYEAR = LYEAR + 1
  569.      IF LMONTH < 1 THEN LMONTH = LMONTH + 12: LYEAR = LYEAR - 1
  570.      NMONTH = LMONTH
  571.      NYEAR = LYEAR
  572.      NDAY = LDAY
  573.      NHOUR = LHOUR + DHOUR
  574.      LastDAY = 31
  575.      IF (NMONTH = 4) OR (NMONTH = 6) THEN LastDAY = 30
  576.      IF (NMONTH = 9) OR (NMONTH = 11) THEN LastDAY = 30
  577.      IF NMONTH = 2 THEN LastDAY = 28
  578.      IF (INT(NYEAR / 4) = (NYEAR / 4)) AND (NMONTH = 2) THEN LastDAY = 29
  579.      IF NHOUR >= 24 THEN NHOUR = NHOUR - 24: NDAY = NDAY + 1
  580.      IF NHOUR < 0 THEN NHOUR = NHOUR + 24: NDAY = NDAY - 1
  581.      IF NDAY > LastDAY THEN NDAY = NDAY - LastDAY: NMONTH = NMONTH + 1
  582.      LastDAY = 31
  583.      IF ((NMONTH - 1) = 4) OR ((NMONTH - 1) = 6) THEN LastDAY = 30
  584.      IF ((NMONTH - 1) = 9) OR ((NMONTH - 1) = 11) THEN LastDAY = 30
  585.      IF (NMONTH - 1) = 2 THEN LastDAY = 28
  586.      IF (INT(NYEAR / 4) = (NYEAR / 4)) AND ((NMONTH - 1) = 2) THEN LastDAY = 29
  587.      IF NDAY < 1 THEN NDAY = NDAY + LastDAY: NMONTH = NMONTH - 1
  588.      IF NMONTH > 12 THEN NMONTH = NMONTH - 12: NYEAR = NYEAR + 1
  589.      IF NMONTH < 1 THEN NMONTH = NMONTH + 12: NYEAR = NYEAR - 1
  590.      RETURN
  591.     
  592. 9999 REM ********************************************************************
  593.      REM *                                                                  *
  594.      REM *  Print End of Program Information                                *
  595.      REM *                                                                  *
  596.      REM ********************************************************************
  597.      SCREEN 0
  598.      WIDTH 80, 25
  599.      CLS : LOCATE 11, 1
  600.      PRINT TAB(17); "                    Dan Bruton"
  601.      PRINT TAB(17); "              Texas A & M University"
  602.      PRINT TAB(17); "                  astro@tamu.edu"
  603.      PRINT TAB(17); "                   October 1994"
  604.      PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT
  605.      END
  606.      REM ************************ END OF PROGRAM ***************************
  607.  
  608.